package lmscript.postscript.syntax;

import lmscript.postscript.syntax.stack.OperandStack;

public abstract class PolymorphicOperator extends PSOperator {

	public static Class[] operators = new Class[] { Get.class, Put.class, Copy.class, Length.class,
			ForAll.class, GetInterval.class, PutInterval.class, ALoad.class, AStore.class,
			SetPacking.class, CurrentPacking.class, Token.class };

	PolymorphicOperator(String name) {
		super(name);
	}
}

/**
 * the following types of composite objects: arrays, packed arrays,
 * dictionaries, and strings
 */
class Get extends PolymorphicOperator {

	Get(String name) {
		super("get");
	}

	@Override
	public boolean execute(OperandStack os) {
		return false;
	}
}

class Put extends ArrayOperator {

	public Put() {
		super("put");
	}

	@Override
	public boolean execute(OperandStack os) {
		return false;
	}
}

class Copy extends ArrayOperator {

	public Copy() {
		super("copy");
	}

	@Override
	public boolean execute(OperandStack os) {
		return false;
	}
}

class Length extends ArrayOperator {

	public Length() {
		super("length");
	}

	@Override
	public boolean execute(OperandStack os) {
		return false;
	}
}

class ForAll extends ArrayOperator {

	public ForAll() {
		super("forall");
	}

	@Override
	public boolean execute(OperandStack os) {
		return false;
	}
}

class GetInterval extends ArrayOperator {

	public GetInterval() {
		super("getinterval");
	}

	@Override
	public boolean execute(OperandStack os) {
		return false;
	}
}

class PutInterval extends ArrayOperator {

	public PutInterval() {
		super("putinterval");
	}

	@Override
	public boolean execute(OperandStack os) {
		return false;
	}
}

/** The following operators apply only to arrays and (sometimes) packed arrays */
class ALoad extends PackedArrayOperator {

	public ALoad() {
		super("aload");
	}

	@Override
	public boolean execute(OperandStack os) {
		return false;
	}
}

class AStore extends ArrayOperator {

	public AStore() {
		super("astore");
	}

	@Override
	public boolean execute(OperandStack os) {
		return false;
	}
}

class SetPacking extends PackedArrayOperator {

	public SetPacking() {
		super("setpacking");
	}

	@Override
	public boolean execute(OperandStack os) {
		return false;
	}
}

class CurrentPacking extends PackedArrayOperator {

	public CurrentPacking() {
		super("currentpacking");
	}

	@Override
	public boolean execute(OperandStack os) {
		return false;
	}
}

class Token extends StringOperator {

	public Token() {
		super("token");
	}

	@Override
	public boolean execute(OperandStack os) {
		return false;
	}
}